pluto555 发表于 2024-5-18 11:22:25

stc15设计

通过STC15IAPW4K58S4芯片输入0~9的数字控制pwm输出的脉冲数量控制步进电机驱动到对应的位置(在0~100毫米之内),需要如何设计代码?

xxxevery 发表于 2024-5-18 11:52:48

控制输出脉冲数量需要用到PWM吗

pluto555 发表于 2024-5-18 11:58:01

要吧,一个pwm波脉冲就驱动步进电机转18°

soma 发表于 2024-5-18 12:29:41

知道前进1毫米要转多少圈不就知道了

angmall 发表于 2024-5-18 20:52:05

本帖最后由 angmall 于 2024-5-18 20:59 编辑

给你个步进机作例程参考。

51单片机轻松入门--基于STC15W4K系列 第15章步进电机测试.pdf

51单片机轻松入门--基于STC15W4K系列 第15章步进电机测试.pdf




angmall 发表于 2024-5-18 20:53:20

给你个参考例程。

/****************《51单片机轻松入门-基于STC15W4K系列》配套例程 *************
★★★★★★★★★★★★★★★★★★★★★★★★
《51单片机轻松入门-基于STC15W4K系列》 一书已经由北航出版社正式出版发行。
作者亲手创作的与教材配套的51双核实验板(2个MCU)对程序下载、调试、仿真方便,不需要外部
仿真器与编程器,这种设计方式彻底解决了系统中多个最高优先级谁也不能让谁的中断竞争问题。
淘宝店地址:https://shop117387413.taobao.com
QQ群:STC51-STM32(3) :515624099 或 STC51-STM32(2):99794374。
      验证信息:STC15单片机
邮箱:xgliyouquan@126.com
★★★★★★★★★★★★★★★★★★★★★★★★*/


// 程序功能:上电后顺转200步,然后反转200步,如此循环。
// 使用P20、P21、P22、P23口驱动电机
#include "STC15W4K.H "
unsigned char code BiaoGe={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09};
                                        // 表格,换算成二进制 1000,1100,0100, 0110 ,0010,0011, 0001 1001
                                        // P2口输出低4位驱动电机   AB/A/B      
                                        // 1——2相励磁,发8次脉冲(顺序输出上面表格)转动4步
void delay3ms(void)
{
        unsigned char i,j,k;
        for(i=1;i>0;i--)         // 注意后面没分号
        for(j=65;j>0;j--)      // 注意后面没分号
        for(k=254;k>0;k--);      // 注意后面有分号       
}
void delay1s(void)
{
   unsigned char i,j,k;
   for(i=85;i>0;i--)      // 注意后面没分号
   for(j=254;j>0;j--)       // 注意后面没分号
   for(k=255;k>0;k--);      // 注意后面有分号
}                                       

void PROT_Init(void)
{        
        P2M1 = 0x80;   // 1000 0000   P2.0、P2.1、P2.2、P2.3、接驱动功率管,推挽输出
        P2M0 = 0x0f;       // 0000 1111   P2.7 接接霍尔传感器信号输入,高阻输入
}
void shun200()                           // 顺转200步
{
        unsigned int i;
        unsigned char n;
        n=0;
        for(i=0;i<400;i++)         // 200步,i/2为实际步数
        {        
                P2=BiaoGe|0xf0;           // 不影响P2口高4位               
                delay3ms();
                n=n+1;       
                if (n>7)
                {                         
                n=0;
                }                       
        }
        P2&=0xf0;                                          // 保证电机绕组断电
}
void fan200()                                          // 反转200步
{
        unsigned int i;
        unsigned char n;
        n=8;                       
        for(i=0;i<400;i++)            // 200步,i/2为实际步数
        {        
          n=n-1;               
                P2=BiaoGe|0xF0;              // 不影响P2口高4位                       
                delay3ms();
                if (n==0)
                {                          
                n=8;
                }                       
        }
        P2&=0xf0;                                          // 保证电机绕组断电        
}
void main(void)                                  
{                   
        PROT_Init();                      // 初始化端口       
        while(1)
        {
                shun200();
                delay1s();
                fan200();
                delay1s();
        }       
}
页: [1]
查看完整版本: stc15设计