qixiyi

【PSoC4】滑条电机调速控制系统

0
阅读(3025)

滑条电机调速控制系统

 

一、             原理概述

 

电机在各行各业发挥着重要的作用,而电机转速是电机重要的性能指标之一,因而控制电机的转速,使它满足人们的各种需要,显得尤为重要;随着技术的发展,PWM调速已经成为电机调速的成熟方式。

脉宽调制(PWM)是一种对模拟信号电平进行数字编码的方法,它不仅容易由软件来实现,而且从处理器到被控制信号都是数字形式无需数模转化,加上PWM对噪声的抵抗能力强,使得PWM成为目前电机调速的主要方法。

 

二、             PSOC4系统结构图


原理图


引脚配置

 

三、             功能介绍及实现步骤

 

本文实现基于PSOC4开发套件+L298模块组成系统对直流电机进行调速,通过串口返回PWM占空比,进而了解电机空载的大致转速。

具体的实现步骤为:

 

(1)    打开原理图设计界面,添加PWM模块(TCPWM mode



双击进入属性配置



禁止中断和所有输入信号,设置period 值为65535compare 值为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(分辨率)参数用于定义定时器的位宽。可根据最大计数值25565535167772154294967295,分别将此值设置为8162432

Period(周期)参数用于定义计数器的周期。定时器组件的最大计数值(或翻转点)等于Period减去1Period减去1是加载到周期寄存器中的初始值。软件可随时使用Timer_WritePeriod() API更改周期寄存器。要使用此API获取等同的结果,必须将定制器中的周期值减去1用作为此函数中的参数。

Trigger Mode(触发模式)参数用于配置触发输入的实现。

Enable Mode (使能模式)参数用于配置定时器的使能条件。

Run Mode(运行模式)参数用于将定时器组件配置为连续运行模式或单次触发模式。

Interrupt(中断) 参数用于配置初始中断源。当发生以下所选的一个或多个事件时,会生成中断。软件可随时重新配置此模式;此参数用于定义初始配置。

 

(5)    添加中断模块(v1.70

 


         本文选择使用上升沿中断。

InterruptType(中断类型)

该参数具有以下三个可能的值:

RISING_EDGE(上升沿) 在源信号的上升沿上触发中断。

LEVEL(电平) 选择通过DSI 以电平敏感类型连接至中断的源。

DERIVED(派生) 这是默认设置。中断组件连接到固定功能块(I2CUSBCAN 等)时,它会检查“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的占空比,从而大致了解电机的空载转速。

 



 


旋转的车轮。