// Program for Arduino Nano for self-made car battery cold-crank waveform generator in combination with RT8131BGQW Buck controller // Roland van Roy, Richtek Europe FAE January 2021 void setup() { TCCR0B = TCCR0B & B11111000 | B00000001; // for PWM frequency of 62500.00 Hz, note delay(1) gives 15.8usec delay pinMode(5,OUTPUT); // PWM output on pin 5 pinMode(6, OUTPUT); // LED mounted on pin 6 pinMode(3, INPUT); // switch mounted on pin 3 pinMode(2, INPUT); // switch mounted on pin 2 analogWrite(5, 42); //set PWM for 0.8V initial output } void loop() { if (digitalRead(3)== HIGH){ // run 1 time profile profile(); } if (digitalRead(2)==HIGH){ // run 30 times profile with 1.5 sec in between for (int i = 1; i<=30; i=i+1){ profile(); delay(32000); //0.5sec delay(32000); //0.5sec delay(32000); //0.5sec } } } void profile() { // crank profile subroutine digitalWrite(6,HIGH); // LED ON //step1 for (int i = 42; i <= 192; i=i+1) { analogWrite(5, i); delay(1); //150 steps in 1*15.8usec = 2.37msec but will be ~ 5msec when including program delay } //step2 delay(315); // delay 5msec // step3 for (int i = 192; i >= 129; i=i-1) { analogWrite(5, i); delay(100); //63 steps in 100*15.8usec = 100msec } // step4 delay(3150); //50msec // step5 for (int i = 129; i >= 105; i=i-1) { analogWrite(5, i); delay(126); //25 steps in 126*15.8usec = 50msec } // step6 delay(3150); //delay 50msec // step7 for (int i = 105; i <= 129; i=i+1) { analogWrite(5, i); delay(126); //25 steps in 126*15.8usec = 50msec } // step8 for (int i = 129; i >= 92; i=i-1) { analogWrite(5, i); delay(85); //37 steps in 85*15.8usec = 50msec } // step9 delay(3150); //50msec // step10 for (int i = 92; i <= 117; i=i+1) { analogWrite(5, i); delay(126); //25 steps in 126*15.8usec = 50msec } // step11 for (int i = 117; i >= 67; i=i-1) { analogWrite(5, i); delay(504); //50 steps in 504*15.8usec = 400msec } // step12 for (int i = 67; i >= 42; i=i-1) { analogWrite(5, i); delay(13); //25 steps in 13*15.8usec = 5msec } digitalWrite(6,LOW); // LED OFF }