【PSoC4】滑条电机调速控制系统
0赞滑条电机调速控制系统
一、 原理概述
电机在各行各业发挥着重要的作用,而电机转速是电机重要的性能指标之一,因而控制电机的转速,使它满足人们的各种需要,显得尤为重要;随着技术的发展,PWM调速已经成为电机调速的成熟方式。
脉宽调制(PWM)是一种对模拟信号电平进行数字编码的方法,它不仅容易由软件来实现,而且从处理器到被控制信号都是数字形式无需数模转化,加上PWM对噪声的抵抗能力强,使得PWM成为目前电机调速的主要方法。
二、 PSOC4系统结构图
原理图
引脚配置
三、 功能介绍及实现步骤
本文实现基于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();
/* Start scanning all enabled sensors */
CapSense_CSD_ScanEnabledWidgets();
/* Wait for scanning to complete */
while(CapSense_CSD_IsBusy() != 0);
/* Display CapSense state using LEDs */
CapSense_DisplayState();
}
}
void CapSense_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;
}
}
}
五、 演示效果图
串口调试助手接收到的信息,PWM的占空比,从而大致了解电机的空载转速。
旋转的车轮。