历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2020年03月02日 | 单片机PWM直流电机调速显示转速

2020-03-02 来源:51hei

PWM直流电机调速仿真原理图如下
 

Altium Designer画的PWM直流电机调速原理图和PCB图如下:

PWM直流电机调速单片机程序如下

#include

#include

#include "LCD1602.h"


#define uchar unsigned char

#define uint  unsigned int

/**********端口分配*******************************/

sbit add_key=P1^0;  //占空比加

sbit dec_key=P1^1;  //占空比减

sbit z_key=P1^2;  //正转键

sbit f_key=P1^3;  //反转键

sbit run_key=P1^4; //启动/停止键

                  

sbit beep=P3^2;

//电机驱动相关

sbit ENA=P3^5;

sbit IN1=P3^7;

sbit IN2=P3^4;

/**********变量定义*******************************/

//电机相关定义

bit Rotation_f=0;  //步进电机旋转状态标志  为0正转  1反转


bit power_flag=0;  //总开关标志


#define  PWM_cnt_LEN 100  //计数全长

#define PWM_ON  1        //开  

#define PWM_OFF 0        //关

uint PWM_cnt;  //PWM计数

uchar PWM_duty;  //PWM占空比


uint speed_cnt=0;  //转速

uint speed_value;

bit dis_speed_flag=0;

uint delay_cnt;

uchar dis_buf[6];

uchar dis_cnt;

uchar dis_buf1[4];

uchar dis_cnt1;

/*********定义延时1ms子程序************************/

void delay1ms(uint t)//1ms延时子程序

{

    uint k,j;

        for(k=0;k                for(j=0;j<120;j++);

}

/**************************************************/

/**********蜂鸣器报警**********************/

void beep_alarm()

{

        beep=0;

        delay1ms(100);

        beep=1;

}

/*******************************************/

/**********电机停止********************/

void motor_stop()

{

        IN1=1;

        IN2=1;

}

/***************************************/

/*******电机正转********************/

void motor_foreward()

{

        IN1=1;

        IN2=0;

}

/************************************/

/********电机反转**********************/

void motor_reversal()

{

        IN1=0;

        IN2=1;

}

/*****************************************/

/************显示转速*********************/

void dis_speed()

{

        dis_cnt=0;

        if(speed_value/10000!=0)

        {

                dis_buf[dis_cnt]=speed_value/10000+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10000/1000+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%1000/100+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%100/10+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10+0x30;

                dis_cnt++;

        }

        else if(speed_value%10000/1000!=0)

        {

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10000/1000+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%1000/100+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%100/10+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10+0x30;

                dis_cnt++;

        }

        else if(speed_value%1000/100!=0)

        {

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%1000/100+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%100/10+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10+0x30;

                dis_cnt++;

        }

        else if(speed_value%100/10!=0)

        {

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%100/10+0x30;

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10+0x30;

                dis_cnt++;

        }

        else

        {

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=' ';

                dis_cnt++;

                dis_buf[dis_cnt]=speed_value%10+0x30;

                dis_cnt++;

        }

        dis_buf[dis_cnt]='';

        LCD1602_Print(2,0,dis_buf);        //显示转速

}

/*****************************************/

/**********显示占空比*********************/

void dis_duty()

{

    dis_cnt1=0;

        if(PWM_duty/100!=0)

        {

                dis_buf1[dis_cnt1]=PWM_duty/100+0x30;

                dis_cnt1++;

                dis_buf1[dis_cnt1]=PWM_duty%100/10+0x30;

                dis_cnt1++;

                dis_buf1[dis_cnt1]=PWM_duty%10+0x30;

                dis_cnt1++;

        }

        else if(PWM_duty%100/10!=0)

        {

                dis_buf1[dis_cnt1]=' ';

                dis_cnt1++;

                dis_buf1[dis_cnt1]=PWM_duty%100/10+0x30;

                dis_cnt1++;

                dis_buf1[dis_cnt1]=PWM_duty%10+0x30;

                dis_cnt1++;

        }

        else

        {

                dis_buf1[dis_cnt1]=' ';

                dis_cnt1++;

                dis_buf1[dis_cnt1]=' ';

                dis_cnt1++;

                dis_buf1[dis_cnt1]=PWM_duty%10+0x30;

                dis_cnt1++;

        }

        dis_buf1[dis_cnt1]='';

        LCD1602_Print(9,1,dis_buf1);        //显示占空比

}

/*****************************************/

/*************定时器初始化程序*******************/

void timer_init(void)  

{

        TMOD=0x11; //设置定时器0,1为16位模式

        TH0=0xD8;  //10ms定时初值         10ms  D8F0           

        TL0=0xF0;

        ET0=1;     //定时器0中断开

        TR0=1;     //开定时器0


        TH1=0xFF;  //100us定时初值

        TL1=0x9C;

        ET1=1;     //定时器1中断开

        TR1=1;     //开定时器1

        EA=1;      //总中断开

}

/*************************************************/

/***********定时器0中断服务程序*******************/

void timer0(void) interrupt 1  

{

        TH0=0xD8;  //10ms定时初值 10ms  D8F0

        TL0=0xF0;

        delay_cnt++;

        if(delay_cnt>=200)  //2S计时

        {

                delay_cnt=0;

                speed_value=speed_cnt*30;  //30  将两秒内的计数乘以30得到转每分          (还要除2  因为有两片磁铁)  30/2=15

推荐阅读

史海拾趣

达方(DARFON)公司的发展小趣事

达方电子股份有限公司于1997年在台北市创立,初始阶段主要致力于IT周边组件的研发与生产。创始人凭借对市场趋势的敏锐洞察,决定专注于笔记本键盘的生产,并逐步在行业中崭露头角。通过不断的技术创新和产品优化,达方电子的笔记本键盘逐渐获得了市场的认可,为公司的发展奠定了坚实的基础。

Chyao Shiunn Electronic Industrial Ltd公司的发展小趣事

为了进一步扩大业务范围,Chyao Shiunn开始实施全球化战略。公司积极寻求与国际知名企业的合作机会,通过技术合作、合资经营等方式拓展海外市场。同时,公司还加强了对海外市场的调研和分析,根据市场需求调整产品策略和生产计划。这些举措使得公司的业务遍布全球多个国家和地区,实现了合作共赢的局面。

方舟(ARKLED)公司的发展小趣事

方舟公司不仅关注经济效益,还积极履行社会责任。公司积极参与环保事业,推动绿色生产,减少能源消耗和废弃物排放。同时,方舟公司还关注社会公益事业,捐资助学、扶贫济困,为社会和谐发展贡献了一份力量。

Fenghua (HK) Electronics Ltd公司的发展小趣事

在技术创新的基础上,Fenghua (HK) Electronics Ltd积极拓展国内外市场。公司参加了多个国际电子展,与全球各地的客户建立了良好的合作关系。同时,公司注重品牌建设,通过广告宣传、赞助活动等方式,提高了品牌知名度和美誉度。这些努力使得公司的产品在国内外市场上占据了越来越大的份额。

Clover Display Limited公司的发展小趣事

随着中国内销市场的不断扩大,Clover Display Limited看到了巨大的商机。为了更好地服务中国内销客户,公司在2001年在深圳南山区成立了高华电子显示(深圳)有限公司。这家子公司以独资经营方式运作,可以开具增值税发票,以人民币结算,从而更加便捷地服务中国客户。深圳子公司的成立不仅拓宽了公司的销售渠道,也为其在中国市场的进一步发展奠定了坚实基础。

Delock公司的发展小趣事

Delock公司自创立之初,就致力于电子连接技术的研发。公司创始人李先生敏锐地洞察到市场对高性能、稳定可靠的电子连接设备的需求,于是带领团队投入大量资源进行技术研发。经过数年的努力,Delock公司成功开发出一种具有革命性意义的电子连接器,不仅传输速度快,而且耐用性高,迅速在市场上获得了认可。这一创新不仅为Delock公司带来了可观的利润,也为公司在电子行业树立了技术领先的形象。

问答坊 | AI 解惑

20W的数字功放

只有八个引脚的数字功放,可以达到20W的功率,可惜是单声道的,发上来与大家一同学习…

查看全部问答>

xilinx 和altera两者目前应用情况?

XILINX 给我感觉价格高,应用通信等高端应用。 ALTERA 价格便宜,应用工业和消费电子。…

查看全部问答>

Software-Defined Radio with LabVIEW FPGA

Software-Defined Radio with LabVIEW FPGA…

查看全部问答>

LED晶圆技术发展趋势及LED晶圆制程

replyreload += \',\' + 759475;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

超级终端乱码

[root@(none) /]# ls 1;34mQtopia0m     1;34mdev0m        1;34mhome0m       1;32mlinuxrc0m    1;36mram disk0m    1;32mtestshell0m   ...…

查看全部问答>

c8051F350 定时中断死机?

void Timer0_Init(void){     TH0 = 0x0B;           // Init Timer0 High register   TL0 = 0xDC ;           / ...…

查看全部问答>

对比方案赛+型号或名称相似芯片在webench设计中的对比

本帖最后由 地瓜patch 于 2014-7-29 19:32 编辑 一直一来,对于那些名称类似的芯片一直是以可以相互替换的视角来应用的。 比如TL061CPSR和TL064CNSR两颗芯片。 这两颗芯片在webench中的滤波器设计中能看到他们的身影。 至于两颗芯片的区别有多 ...…

查看全部问答>

CCS单步调试与run的板子运行状况不一样

用单步运行下面的程序,使LED闪烁。直接run却不行,请问大神们怎么解决这个问题? for(;;)    {               GpioDataRegs.GPASET.bit.GPIO6   =1;       &nb ...…

查看全部问答>

关于TTI抽奖活动抽中奖品何时能收到问题?

请问我在TTI 这个抽奖活动 https://www.eeworld.com.cn/huodon ... hibitions_20160218/ 中2月26日抽中了一个三星32G存储卡,那么何时能收到这个奖品呢?到时奖品是按照我论坛中登记的会员地址信息邮寄么?当时抽中了以后,就没有其他任何提示了, ...…

查看全部问答>