链接
【树莓派步进电机】【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()
效果还不错
【树莓派控制步进电机】以三角函数的方式运行