Motor Driver BTS7960 43A (3 / 4 steg)
Steg 3: PWM... Arduino Timer
Timer0 är ansluten till pin D5, D6, vi vill öka frekvensen "Mer smidigt kontroll"
Observera att Timer0 är kontroll (fördröjning, millis) på arduino, så någon förändring på prescale av denna timer kommer att ändra fördröjning och millis tiden.
int RPWM = 5;
int LPWM = 6;
int L_EN = 7.
int R_EN = 8;
void setPWMfrequency (int freq) {
TCCR0B = TCCR0B & 0b11111000 | Freq;
}
void MotorActiveStatus (char sida, booleska s) {
booleska state = s;
IF(Side=='R') {
digitalWrite(R_EN,s);
}
IF(Side=='L') {
digitalWrite(L_EN,s);
}
}
void setMotor (char sida, byte pwm) {
IF(Side=='R') {
analogWrite(RPWM,pwm);
}
IF(Side=='L') {
analogWrite(LPWM,pwm);
}
}
void closeMotor(char side) {
IF(Side=='R') {
digitalWrite(RPWM,LOW);
}
IF(Side=='L') {
digitalWrite(LPWM,LOW);
}
}
void setup() {
sätta din installation kod här, om du vill köra en gång:
setPWMfrequency(0x02); / / timer 0, 3.92KHz
för (int jag = 5; jag < 9; i ++) {
pinMode(i,OUTPUT);
}
för (int jag = 5; jag < 9; i ++) {
digitalWrite(i,LOW);
}
Delay(1000);
MotorActiveStatus('R',true);
MotorActiveStatus('L',true);
Serial.BEGIN(9600);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
för (int jag = 0; jag < 256; i ++) {
setMotor('R',i);
Delay(500);
}
Delay(1000);
closeMotor('R');
Delay(1000);
för (int jag = 0; jag < 256; i ++) {
setMotor('L',i);
Delay(500);
}
Delay(1000);
closeMotor('L');
Delay(1000);
}
om vi vill använda den här koden med en annan timer "timer 2" rättvis ändra D5, D6 till pin D3, D11 respektive
int RPWM = 3;
int LPWM = 11;
int L_EN = 7.
int R_EN = 8;
void setPWMfrequency (int freq) {
TCCR2B = TCCR2B & 0b11111000 | Freq;
}
void MotorActiveStatus (char sida, booleska s) {
booleska state = s;
IF(Side=='R') {
digitalWrite(R_EN,s);
}
IF(Side=='L') {
digitalWrite(L_EN,s);
}
}
void setMotor (char sida, byte pwm) {
IF(Side=='R') {
analogWrite(RPWM,pwm);
}
IF(Side=='L') {
analogWrite(LPWM,pwm);
}
}
void closeMotor(char side) {
IF(Side=='R') {
digitalWrite(RPWM,LOW);
}
IF(Side=='L') {
digitalWrite(LPWM,LOW);
}
}
void setup() {
sätta din installation kod här, om du vill köra en gång:
setPWMfrequency(0x02); / / timer 2, 3.92KHz
för (int jag = 5; jag < 9; i ++) {
pinMode(i,OUTPUT);
}
för (int jag = 5; jag < 9; i ++) {
digitalWrite(i,LOW);
}
Delay(1000);
MotorActiveStatus('R',true);
MotorActiveStatus('L',true);
Serial.BEGIN(9600);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
för (int jag = 0; jag < 256; i ++) {
setMotor('R',i);
Delay(50);
}
Delay(500);
closeMotor('R');
Delay(1000);
för (int jag = 0; jag < 256; i ++) {
setMotor('L',i);
Delay(50);
}
Delay(500);
closeMotor('L');
Delay(1000);
}