算出系统的传递函数
由此可以推出系统的传递函数为:
G(s)?G(1?2GH) 2(1?GH)K0K1KmKp(1?式中
G? H?K3s1?Tds)Tis
s(Tms?1)两个电机分别由单片机产生的两个pwm控制,通过pid算法调整pwm的占空比即可两个电机同步达到预订的转速。
7 软件实现
7.1 单片机片内的资源配置
7.1.1 单片机内各功能模块配置
程序设计中所需要的单片机内部各功能模块如表7.1,包括2个定时计数器。
表7.1 单片机内部功能模块使用情况说明表
Timer0:PCA0定时/计数器时基 定时器 Timer2:计主电机的速度脉冲 Timer1:UART0使用 Timer3:计从电机的速度脉冲 Timer4:25ms定时器,循环4次构成采样时间和计算时间 PCA0 UART0 PCA0:产生主电机PWM波 PCA1:产生从电机PWM波 单片机与上位机串行通信控制器 T2、T3和T4的功能是相同的,不能作为8位定时/计数器,只能工作在16位模式下,可自动重载、捕捉和产生50%占空比的频率可调脉冲方波,且可以控制计数的方向。它们的时钟源可以是系统时钟及其分频、外部时钟或它们输入引脚的脉冲。这些都是通过特殊功能寄存器TMRnCN和TMRnCF设置的。双向计数模式对电机速度控制很方便,可计电机的正反转。捕捉模式常用来测量脉宽。方波输出模式可产生50%占空比的频率可调脉冲方波。
PCA0提供了一个16位定时/计数器和6个捕捉/比较模块。每个捕捉/比较模块都有独立的I./O口,可通过交叉开关配置到CEXn。PCA定时/计数器时钟源可为系统时钟、系统时钟4分频、系统时钟12分频、外部时钟8分频、T0溢出和ECI。ECI可配置到P口上,作为PCA时钟的一个扩展。6个模块共用一个时钟,可分别独立工作在以下6种模式:①边沿触发捕捉;②软件定时;③高速输出;④频率输出;⑤8位PWM脉宽调制;⑥16位PWM脉宽调制。其中在8位PWM脉宽调制模式下的输出波形频率为PCA时钟频率的256分频,8位PWM占空比公式为:
256?PCA0CPHn DutyCycle?
256此时,只要将PCA0开启,为PCA配置一个时钟源,将相应模块设在8位PWM模式下,并将PWM输出开启,再将该模块配置到一个I/O口上,则不再需要处理器的干预,PCA
会自动地向外端口输出PWM波,只有当需要改变占空比的时候,修改一下该模块的捕捉比较寄存器PCA0CPHn即可。
7.1.2 单片机的端口配置
单片机的外部输入输出端口配置如表7.2。C8051F020单片机由于体积小,不可能把每一个功能都设计成一个关口,而是采用交叉开关的设计方法,通过优先级解码,将各个功能按优先级顺序配置到P0~P3口上。P0~P3口既可作为普通通用输入/输出口,又可作为特殊功能口,比如UART、PWM、定时器输入输出口及外部事件中断等,由交叉开关寄存器XBR0,XBR1,XBR2和XBR3配置决定。优先级高的模块会自动分配到前面的端口上。大部分被交叉开关配置的端口其输出模式仍受PnMDOUT控制,有推挽和开漏两种输出模式。
表7.2. 单片机I/O端口配置表
资源 P0.2:CEX0,PWM0输出 I/O管脚 P0.4:T2主电机速度脉冲输入 P0.5:T3从电机速度脉冲输入 分配 P0.3:CEX1,PWM1输出
7.2 程序模块介绍
软件是控制器的灵魂,在数字控制系统中,主从式控制结构以及PID控制算法都要有相应的软件才能够实现。在本设计中,软件需要完成以下任务:(1)各功能模块初始化;(2)测量并计算主从两电机速度;(3)按偏差信号进行PID计算,得出左右电机的控制量并依次改变两路PWM的占空比。因此,总的程序可分为以下程序段:①初始化模块;②测速子程序;③主程序。下面分别予以介绍。 7.2.1 初始化模块
初始化子程序段是通过在主程序中调用来完成初始化功能的。由于本系统使用
的是片上系统(SOC)单片机,与其他类型的单片机相比,其内部有着更多的数字资源,工作方式多样,对所用到的内部资源必须一一进行初始化以保证正常工作,所以初始化是非常重要的一环。初始化流程图如图7.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)Timer0工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T0的溢出率作为PWM0和PWM1的时基,
24500000?160?0XA0 TH0?256?256?1000
开 始 端口配置和晶振设置 PCA0初始化 定时器0初始化 定时器1初始化 定时器2初始化 定时器3初始化 定时器4初始化
图7.1 初始化流程图
(4)Timer1工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T1作为UART0的波特率发生器,
24500000?243?0XF3 TH1?256?115200?16(5)Timer2工作在计数模式下,通过查询可得到与左电机相连接的光电编码器在25ms内发出的脉冲数;
(6)Timer3工作方式与 Timer2相同,计量右电机的速度脉冲;
(7)Timer4工作在自动重载定时方式下,以系统时钟的12分频作为自己的时钟源,定时25ms, 定时时间一到发出中断信号,程序开始响应T4中断。
24500000?0X389E RCAP4?0XFFFF?12?407.2.2 测速子程序
测速子程序是通过调用Timer4中断来完成的。Timer4中断子程序流程图如图7.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?
5