开始 系统初始化 速度脉冲信号输入I/O口扫描 否 1S计时标志 是 速度及A/D值采样 串口发送数据 PWM输出 结束
图13 系统主程序流程图 2.串口中断发送程序
本系统的串口通信指的是单片机与上位机(PC机)之间的串口通信,该通信主要用于测速模块的调试以及在测量转速时,单片机能从上位机(PC机)接收数据或者能将数据发回给上位机(PC机),以便观察电机转动情况,或者获得我们所需要的数据。
如图14所示,在本设计中,采用的是STC12C5A60S2芯片的串口UART0来与PC机进行串口通信。在串口UART0的配置中,定时/计数采用方式2是将两个8位计数器TH1和TL1分成独立的两个部分,组成一个8位可自动再装入的定时器/
计数器,由TL1作为8位计数器,TH1作为计数初值寄存器,设置初值时同时送TH1和TL1,当TL1计数满回0产生溢出,
不仅置位TF1,而且控制TH1中的初值重新装入TL1,继续下一轮计数,此信号送串行通信系统,以设置串行通信波特率,波特率设置公式如式所示:波特率=2 SMOD*(溢出率)/32 。
进入发送中断 发送1byte数据 否 1字节数据发送完毕 ? 是 发送第二字节数据 否 1字节数据发送完毕 ? 是 中断返回
图14 串口发送程序流程图
3.串口中断接收程序
上位机控制单元解扩出1bit数据后,产生一次中断。接收时首先采用16bits接收窗口、1bit滑动方式来接收通信的同步帧头0x09、0xAF,帧头接收成功后,后续数据按每8bits一个字节的方式进行截取,得到传送的有效数据,同时将得到的有效数据存储在缓冲单元中;接收过程中,按有关的通信协议进行地址判别、长度接收、校验计算。地址相同的模块对符合通信协议的数据进行应答,转入发送态。程序流程图如图15所示。
进入接收中断 清零接收标志 否 1字节数据接收完毕 ? 是 重组数据 中断返回
图15 串口接收程序流程图
4.A/D转换程序
A/D转换程序主要用于电机速度的输入模拟信号的采集与转换。程序流程图如图16所示。
启动指定通道 延时 否 转换结束? 是 返回转换结果
图16 A/D转换程序流程图
5.PWM输出程序
PWM控制——脉冲宽度调制技术,即通过一系列脉冲的宽度调制来等效地获得所需的波形(含形状和幅值),程序主要用于控制电机转速,他通过主程序的反馈算法计算出来,然后调整脉冲宽度来控制电机。程序流程图如图17所示。
设置寄存器CCON=0; 设置PWM模式寄存器CMOD=0x00,及PWM频率为系统时钟/12 设置寄存器PCA_PWM0=0x00; CCAPM0=0x42; 设置寄存器CCAP0H,CCAP0L,调节脉冲宽度 设置允许PCA计数器计数标志位CR
图17 PWM输出程序流程图
6.定时器0中断服务程序
定时器0中断程序主要用于1秒定时、转速的计算、A/D值采集以及上位机显示刷新。程序流程图如图18所示。
入口 计时赋初值 1秒计时标志? 是 否 计算转速,读取A/D,显示刷新 返回
图18定时器0中断服务程序流程图
四、 系统调试及性能分析
1. 系统硬件调试
1.1如图19为系统测速电路的采样波形
图19 经整形后的速度脉冲波形
1.2串口收发数据调试
串口电路是连接PC机与通信模块的桥梁,可借助串口调试助手对所设计的串口通信电路和通信模块进行测试。如图5.1所示,通过串口调试助手,向端口分别发送数据0x01、0x02、0x03、0x04、0x05数据经串口电路被单片机接收,将数据进行存储判断,决定是开启显示和电机还是正反转或是停止,同时将所出状态及电机转速发送回来,在串口调试助手的接收窗口上可以看到接收到的数据。串口调试如图20所示。
图20 电机转速及对应的电压显示数据
1.3实物展示