表3.2. 单片机I/O端口配置表
资源 P0.0:TX0发送数据端 I/O管脚 P0.2:CEX0,PWM0输出 P0.4:T2主电机速度脉冲输入 分配 P0.1:RX0接收数据端 P0.3:CEX1,PWM1输出 P0.5:T3从电机速度脉冲输入 3.3 程序模块介绍
软件是控制器的灵魂,在数字控制系统中,主从式控制结构以及PID控制算法都要有相应的软件才能够实现。在本设计中,软件需要完成以下任务:(1)各功能模块初始化;(2)测量并计算主从电机速度;(3)按偏差信号进行PID计算,得出主从电机的控制量并依次改变两路PWM的占空比;(4)建立与上位PC机的通信,能按上位机的命令调整主电机的速度设定值并反馈主从电机实际速度值。因此,总的程序可分为以下程序段:①初始化模块;②测速子程序;③串口通信子程序;④主程序。下面分别予以介绍。
3.3.1 初始化模块
初始化子程序段是通过在主程序中调用来完成初始化功能的。由于本系统使用的是片上系统(SOC)单片机,与其他类型的单片机相比,其内部有着更多的数字资源,工作方式多样,对所用到的内部资源必须一一进行初始化以保证正常工作,所以初始化是非常重要的一环。初始化流程图如图3.1所示。 各数字模块设置的工作方式如下:
(1)端口配置情况如表2。其中P0.0口,P0.2口和P0.3口均设为推挽输出,P0.1口、P0.4口和P0.5口均设为开漏输出。系统时钟采用内部晶振1分频,即24.5MHZ,精度高达±2%;
(2)PCA定时/计数器时钟源采用T0溢出率,模块CEX0、CEX1工作8位PWM输出模式下,在本设计中,控制直流电机的两路PWM波频率设在1KHZ;
(3)UART0工作在模式1下,即为标准异步全双工通信,其波特率时钟为Timer1溢出率的16分频,采用115200HZ。当接收中断标志位RI=1或发送中断标志位TI=1时,程序进入UART0中断执行接收或发送数据的指令;
(4)Timer0工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T0的溢出率作为PWM0和PWM1的时基,
24500000?160?0XA0 (3-3) TH0?256?256?1000
26
开 始 端口配置和晶振设置 PCA0初始化 UART0初始化 定时器0初始化 定时器1初始化 定时器2初始化 定时器3初始化 定时器4初始化 图3.1 初始化流程图
(5)Timer1工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T1作为UART0的波特率发生器,
24500000?243?0XF3 (3-4) TH1?256?115200?16(6)Timer2工作在计数模式下,通过查询可得到与主电机相连接的光电编码器在25ms内发出的脉冲数;
(7)Timer3工作方式与 Timer2相同,计量从电机的速度脉冲;
(8)Timer4工作在自动重载定时方式下,以系统时钟的12分频作为自己的时钟源,定时25ms, 定时时间一到发出中断信号,程序开始响应T4中断。
24500000?0X389E (3-5) RCAP4?0XFFFF?12?40 27
3.3.2 测速子程序
测速子程序是通过调用Timer4中断来完成的。Timer4中断子程序流程图如图3.2所示。
T4循环定时,定时时间是25ms,作为速度采样的基本周期。T4定时时间一到,程序就进入中断,分别读取一次主从电机的速度。在T4中断子程序中,变量i作为T4定时循环标志,当循环4次达到0.1秒,变量j被置1,变量j是主程序运算标志,当j等于1时,主程序进入if语句进行一次控制计算。因此,本程序的控制周期为0.1秒。电机的速度是每25ms采样一次,在0.1秒内,每个电机的速度脉冲都计了4次,分别依次保存在两个4维数组CS1[]和CS2[]中,4个数值相加就是0.1秒内电机的实测脉冲数。本程序在计算中采用了一定的抗干扰措施,即舍去四个脉冲数据中的最大最小值,由剩余两数相加乘2作为整个时间段(0.1s)内应计的脉冲个数,这能很好地克服瞬时性的干扰。
值得说明的是,主从电机在0.1秒内所计的速度脉冲数值cesu1和cesu2,它与电机以分钟为单位的实际转速是不同的,它们之间成一个正比的关系,设主从电机的实际速度分别是speed1和speed2,它们之间的换算关系如下:
3 speed1?cesu1? (3-6)
53 speed2?cesu2? (3-7)
5由于本设计中所采用的直流电机额定速度达到500转/分,已经超出了一个字节的范围,用这个数值进行偏差计算仍然需要定义一个16位的整形变量来表示,并不能简化计算量。在500转/分的额定转速下能测到的脉冲个数能达到834,输出控制量是8位PWM的占空比,其范围是0到255,为了提高控制精度,在计算主电机速度偏差时采用了测量脉冲数,这就要求将主电机的设定速度转化成0.1秒下单片机应计的标准脉冲个数shd进行偏差计算。例如要求电机的转速为shj,
其转化公式为:
5 shd?shj? (3-8)
3 28
开始 i 自加1 将T2计数值存入数组 CS1并将T2清0 将T3计数值存入数组 CS2并将T3清0 TF4清0 i>=4 选出CS1中最大最小值 计算cesu1 选出CS2中最大最小值 计算cesu2 将i清0,j置1 中断返回
图3.2 测速子程序流程图
29
3.3.3 串口通信子程序
与上位PC机通信是通过UART0中断子程序中完成的。UART0通信可用查询TI0和RI0或通过中断来控制通信,这里采用了中断的方式。该子程序包括两部分功能:一是接收由上位机给出的主电机速度设定值,并根据设定值选择相应的控制参数;一是将主从电机的实际速度传给上位机。其程序流程图如图3.3所示。
串口中断有两个中断标志位,分别是接收中断标志位RI和发送中断标志位TI,因此在程序中需要对它们进行判断。当RI等于1时,说明收到一个8位数据,执行一次读SBUF0的指令,把数据保存在数组js[]中,并将RI清0;当TI等于1时,说明发送完一个8位数据,可以接着继续发送数据,也可以不发,在中断中将TI清0,向SBUF0写数据就自动启动UART0发送数据。
在串口通信中断程序中,规定单片机一次连续接收3个8位数据,保存在三维数组js[]中,第一个数据是主电机速度给定值16进制的高8位,第二个是其低8位,第三个数据是控制位,当第三个数据为1时才开始更新主电机的速度设定值,并判断这个设定的速度所处的速度段,选择控制参数Kp、Ti和Td。当第三个数据为0时不改变主电机速度设定值,此时开始上传主从电机实际速度。规定一次连续上传6 个8位数据,在程序中即为6维字符型数组fs[],其中第一位数据是主电机实际速度16进制形式的低8位,第二位数据是其高8位,第三位数据是0,第四位数据是从电机实际速度16进制形式的低8位,第五位数据是其高8位,第六位数据是0。
因此,在上位机的操作界面上,发送数据的格式要与之对应。一次性发三个数据,假设要求主电机的速度为shj,当Shj大于255时,则发送的第一个数据为1,第二个数据为(shj-256),第三个数据为1;当shj小于255时,则发送的第一个数据为0,第二个数据为shj,第三个数据为1。
30
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库多电机同步控制(6)在线全文阅读。
相关推荐: