【树莓派步进电机】【2.2】PWM篇:自动生成控制代码

链接
【树莓派步进电机】【1】基础篇:接线、控制代码
【树莓派步进电机】【2.1】PWM篇:控制代码

一. Matlab主代码

链接

1.1 低电平代码,正向转

运行完毕主代码后运行

%% 2.自动化语句生成代码(1)正向转
clc
Result_UT_str=num2str(Result_UT(1));
Result_PL_str=num2str(Result_PL(1));
%% 低电平
% 
% 
% %         set_direction(0)#0是低电平,控制杆伸出
%         pulse_terminal.ChangeFrequency(1000)#调频率
%         start(pulse_terminal)
%         time.sleep(0.5)#运行时长/秒
%         
%         pulse_terminal.ChangeFrequency(250)#调频率
%         start(pulse_terminal)
%         time.sleep(2.0)#运行时长/秒
%         
% %         stop(pulse_terminal)
%         time.sleep(0.01)#暂停时长/秒

disp(['        set_direction(0)#0是低电平,控制杆伸出' ])        
        
        
for iii=1:length(Result_PL)/2
    %记录步数
    s11='        pulse_terminal.ChangeFrequency(';
    s21=num2str(Result_PL(iii));
    s31=')';
    s1 = strcat(s11,s21,s31);
    
    s2='        start(pulse_terminal)';
    
    %记录delay时长
    s13='        time.sleep(';
    s23=num2str(Result_UT(1));
    s33=')';
    s3 = strcat(s13,s23,s33);
    %合成语句
    disp([s1 newline s2 newline s3])
%     disp([s1 newline '    digitalWrite(STEPPIN, HIGH);' newline s2 newline '    digitalWrite(STEPPIN, LOW);' newline s2 newline '  }'])
end
disp(['        stop(pulse_terminal)' ])
disp(['        time.sleep(0.01)#暂停时长/秒' newline])

1.2. 高电平代码,逆向转

运行完毕主代码后运行

%% 2.自动化语句生成代码(2)逆向转
clc
Result_UT_str=num2str(Result_UT(1));
Result_PL_str=num2str(Result_PL(1));
%% 高电平

disp(['        set_direction(1)#1是高电平,控制杆缩回' ])        
        
        
for iii=length(Result_PL)/2+1:length(Result_PL)
    %记录步数
    s11='        pulse_terminal.ChangeFrequency(';
    s21=num2str(Result_PL(iii));
    s31=')';
    s1 = strcat(s11,s21,s31);
    
    s2='        start(pulse_terminal)';
    
    %记录delay时长
    s13='        time.sleep(';
    s23=num2str(Result_UT(1));
    s33=')';
    s3 = strcat(s13,s23,s33);
    %合成语句
    disp([s1 newline s2 newline s3])
%     disp([s1 newline '    digitalWrite(STEPPIN, HIGH);' newline s2 newline '    digitalWrite(STEPPIN, LOW);' newline s2 newline '  }'])
end
disp(['        stop(pulse_terminal)' ])
disp(['        time.sleep(0.01)#暂停时长/秒' newline])

二. 插入代码

import RPi.GPIO as GPIO
import time


TERMINAL1 = 38 # PUL +
TERMINAL2 = 35 # DIR +
 
def setup():
    # 初始化
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TERMINAL1, 0)
    GPIO.setup(TERMINAL2, 0)
 
def start(pulse_terminal):
    # 开启脉冲
    pulse_terminal.start(50)#初始化占空比为50,占空比调节范围0-100
 
def stop(pulse_terminal):
    # 停止脉冲
    pulse_terminal.stop()
 
def set_direction(direction):
    GPIO.output(TERMINAL2, direction) # 设置高低电平
 
if __name__ == '__main__':     # Program start from here

    setup()
 
    pulse_terminal = GPIO.PWM(TERMINAL1, 1000) # 脉冲带宽调制(引脚,频率),频率单位Hz
    #首先定位,控制杆缩回原位
    #以下语句视情况运行:当控制杆缩回原处时可不运行
    #set_direction(1)#1是高电平,控制杆缩回
    #pulse_terminal.ChangeFrequency(500)
    #start(pulse_terminal)
    #time.sleep(2)
    
    for i in range(3):#range()里的数是几就循环几次
        #200细分下,1000Hz运行1秒即为一个伸缩来回
        #200细分下,500Hz运行2秒即为一个伸缩来回,以此类推
        
        #下面插入低电平正向转控制杆伸出的语句
        #set_direction(0)

        #下面插入高电平逆向转控制杆缩回的语句
        #set_direction(1)    

    
    GPIO.cleanup()

附:代码示例

振幅*2=25.40mm
周期T=4秒
总分割单元数=20

import RPi.GPIO as GPIO
import time


TERMINAL1 = 38 # PUL +
TERMINAL2 = 35 # DIR +
 
def setup():
    # 初始化
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(TERMINAL1, 0)
    GPIO.setup(TERMINAL2, 0)
 
def start(pulse_terminal):
    # 开启脉冲
    pulse_terminal.start(50)#初始化占空比为50,占空比调节范围0-100
 
def stop(pulse_terminal):
    # 停止脉冲
    pulse_terminal.stop()
 
def set_direction(direction):
    GPIO.output(TERMINAL2, direction) # 设置高低电平
 
if __name__ == '__main__':     # Program start from here

    setup()
 
    pulse_terminal = GPIO.PWM(TERMINAL1, 1000) # 脉冲带宽调制(引脚,频率),频率单位Hz

    set_direction(1)#1是高电平,控制杆缩回
    pulse_terminal.ChangeFrequency(500)
    start(pulse_terminal)
    time.sleep(2)
    
    for i in range(3):#range()里的数是几就循环几次
        #200细分下,1000Hz运行1秒即为一个伸缩来回
        #200细分下,500Hz运行2秒即为一个伸缩来回,以此类推
        #下面插入低电平正向转控制杆伸出的语句
        #set_direction(0)        
        set_direction(0)#0是低电平,控制杆伸出
        pulse_terminal.ChangeFrequency(127)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(359)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(557)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(699)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(773)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(772)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(695)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(550)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(351)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(118)
        start(pulse_terminal)
        time.sleep(0.2)
        stop(pulse_terminal)
        time.sleep(0.01)#暂停时长/秒
        #下面插入高电平逆向转控制杆缩回的语句
        #set_direction(1)      
        set_direction(1)#1是高电平,控制杆缩回
        pulse_terminal.ChangeFrequency(127)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(359)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(557)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(699)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(773)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(772)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(695)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(550)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(351)
        start(pulse_terminal)
        time.sleep(0.2)
        pulse_terminal.ChangeFrequency(118)
        start(pulse_terminal)
        time.sleep(0.2)
        stop(pulse_terminal)
        time.sleep(0.01)#暂停时长/秒
    
    GPIO.cleanup()

在这里插入图片描述效果还不错

【树莓派控制步进电机】以三角函数的方式运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值