系统软件设计整个系统软件由主程序和中断子程序组成,在IAR6.3的环境下编译实现的。由于STM32F103VET6为32位芯片,所以为了计算方便,用Q15格式来代替浮点运算,这样可以防止在做乘法运算时溢出。参与计算的电压全部为实际电压转换后的标幺值,这样能使程序的可移植性更强。
软件架构为了提高整个系统软件的通用性及可移植性,本设计采用分成的设计方法,主要分为应用层、层、板级驱动层。FOC算法层向应用层提供了速度位置设置接口、FOC算法配置接口(包括PID参OCR4OCR1OCR2OCR3计数溢出触发ADCTIM1_CH1TIM1_CH2TIM1_CH3TIM1_CH4图3ADC触发ABC图4编码器输入图5主程序流程图开始系统初始化UART初始化创建一个电机变量设置电机变量参数初始化高级定时器(产生SVPWM)初始化通用定时器(接收编码器信号)ADC初始化使用SVPWM产生中断电机初始位置定位串口是否接收到命令。
执行命令是否基于STM32F103VET6单片机的永磁同步电机控制器设计:为了保证系统的性能,在SVPWM中断子程序中只对电机的位置进行更新(三相电流的值是硬件自动更新的,并不影响软件效率),然后通过SVPWM产生算法输出一个新的电压矢量,使其始终保证输出力矩最大。而系统内部对速度、电流的PID计算并不需要与SVPWM的频率一致,可以在其他定时器SVPWM中断入口保存现场中断屏蔽读取编码器值计算电机位置及转速检查。