本帖最后由 reayfei 于 2013-11-30 13:00 编辑
滑条电机调速控制系统 一、 原理概述
电机在各行各业发挥着重要的作用,而电机转速是电机重要的性能指标之一,因而控制电机的转速,使它满足人们的各种需要,显得尤为重要;随着技术的发展,PWM调速已经成为电机调速的成熟方式。 脉宽调制(PWM)是一种对模拟信号电平进行数字编码的方法,它不仅容易由软件来实现,而且从处理器到被控制信号都是数字形式无需数模转化,加上PWM对噪声的抵抗能力强,使得PWM成为目前电机调速的主要方法。
二、 PSOC4系统结构图
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image002.jpg 原理图
引脚配置
三、 功能介绍及实现步骤
本文实现基于PSOC4开发套件+L298模块组成系统对直流电机进行调速,通过串口返回PWM占空比,进而了解电机空载的大致转速。 具体的实现步骤为:
(1) 打开原理图设计界面,添加PWM模块(TCPWM mode) 双击进入属性配置 禁止中断和所有输入信号,设置period 值为65535, compare 值为1。这将产生一个0%占空比的PWM。点击Apply 或者OK 以保存设置。
(2) 添加UART模块(SCB mode) 双击进入属性配置 SCB配置为UART标准模式,波特率9600,数据格式8N1。 (3) 添加PORT引脚(Digital Output Pin)
(4) 添加Timer模块(v2.50) 双击进入属性配置 本文配置Timer定时周期为1s,每间隔1s都会进入一次中断(发送PWM占空比)。 Resolution(分辨率)参数用于定义定时器的位宽。可根据最大计数值255、65535、16777215和4294967295,分别将此值设置为8、16、24或32。 Period(周期)参数用于定义计数器的周期。定时器组件的最大计数值(或翻转点)等于Period减去1。Period减去1是加载到周期寄存器中的初始值。软件可随时使用Timer_WritePeriod() API更改周期寄存器。要使用此API获取等同的结果,必须将定制器中的周期值减去1用作为此函数中的参数。 Trigger Mode(触发模式)参数用于配置触发输入的实现。 Enable Mode (使能模式)参数用于配置定时器的使能条件。 Run Mode(运行模式)参数用于将定时器组件配置为连续运行模式或单次触发模式。 Interrupt(中断) 参数用于配置初始中断源。当发生以下所选的一个或多个事件时,会生成中断。软件可随时重新配置此模式;此参数用于定义初始配置。
(5) 添加中断模块(v1.70)
本文选择使用上升沿中断。 InterruptType(中断类型) 该参数具有以下三个可能的值: RISING_EDGE(上升沿) — 在源信号的上升沿上触发中断。 LEVEL(电平) — 选择通过DSI 以电平敏感类型连接至中断的源。 DERIVED(派生) — 这是默认设置。中断组件连接到固定功能块(I2C、USB、CAN 等)时,它会检查“int_signal”的驱动,然后根据所连接的对象派生出相应的中断类型。此自动分配是根据器件的数据手册中的信息进行的。
(6) 添加CapSense模块(v1.11) 双击进入属性配置
(7)在引脚配置界面中,选择对应引脚。
四、 程序解析 int main() { /* Enable global interrupts */ CyGlobalIntEnable; isr_StartEx(InterruptHandler);
/* Start PWM UART Timer and CapSense components */ UART_1_Start(); Timer_1_Start(); MOTOR_CONTROL_Start(); CapSense_CSD_Start();
/* Initialize baselines */ CapSense_CSD_InitializeAllBaselines();
while(1u) { /* Update all baselines */ CapSense_CSD_UpdateEnabledBaselines();
/* Startscanning all enabled sensors */ CapSense_CSD_ScanEnabledWidgets();
/* Wait for scanning to complete */ while(CapSense_CSD_IsBusy()!= 0);
/* Display CapSense state using LEDs */ CapSense_DisplayState(); } }
voidCapSense_DisplayState(void) { /* Find Slider Position */ curPos =CapSense_CSD_GetCentroidPos(CapSense_CSD_LINEARSLIDER0__LS);
/* Reset position */ if(curPos == 0xFFFFu) { curPos =0u; }
/* Move bargraph */ if (curPos != oldPos) { oldPos =curPos; /* Display Slider bargraph */ if (curPos != 0u) { MOTOR_CONTROL_WriteCompare((uint32)curPos << SLIDER_POS_TO_COMPARE_SHIFT); duty =(((uint32)curPos << SLIDER_POS_TO_COMPARE_SHIFT)*100)/65536; } } }
五、 演示效果图
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image029.jpg 串口调试助手接收到的信息,PWM的占空比,从而大致了解电机的空载转速。 file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image030.jpg
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image032.jpg 旋转的车轮。
|