My VFD with video and pictures! - Page 1
Forum section: electronics / projects

author: Alexant
author_rank: Newbie
timestamp: September 04, 2015, 10:11:26 pm
content: Hello EEVblog!I wanted to share a video and pictures of my success with a project that i started about a year ago.A quick introduction.My name is Alexander.im 23 years old.I have been working about 4 years as an automation/electrician technician.I started out with electronics as a hobby about 2-3 years ago, i started with arduino and the most advanced thing in programming i progressed to was some random LED blink routine basicly.and in soldering biggest thing i did was veroboard with a transistor, resistor and potentiometer for a 24v dc fan.about a year ago i decided, go big or go home, and i started researching how a vfd operates and decided i shall make one.So i recently finished to about 90% my project that was to create a barebones variable frequency drive.Im going to take some time to rework my PIC code and get a functioning potentiometer speed input.But for now i am really happy with my success!video of my VFD test:https://www.youtube.com/watch?v=djPJI0xilC4.Picture 1:http://i57.tinypic.com/16kb6ll.jpgPicture 2:http://i57.tinypic.com/vdnyoy.jpgpicture 3:http://i60.tinypic.com/2cna8zr.jpg

author: qno
author_rank: Frequent Contributor
timestamp: September 05, 2015, 03:06:03 pm
content: Hi Alex,Good job, i like to know a bit about the code.How did you implement the 3 phase voltage and frequency?I am thinking about making a BLDC driver myself but never got to it.Mabe you can kickstart my project.

author: Alexant
author_rank: Newbie
timestamp: September 06, 2015, 01:47:44 pm
content: Quote from: qno on September 05, 2015, 03:06:03 pmI did not implement the volt/hertz method, only just frequency atm.for two reasons.*at first test example i limited myself to 60vdc* I could not get the code to execute as fast if i were to implement v/hz because you need to calculate the dutycycle based upon the frequency input.ex:I take the ADC value of the potentiometer input configured for left justification meaning i go from 0-255 as an char sized value.then i divide that value with 5 and i get 0-51 i can then limit this value with if statement so i can get 5-50 and call it frequency input.then this value goes into a timer reload algorithm e.x "timer0 reload = 65535 - (fosc/4(sine table entries * frequency input * timer prescaler)so (8e+6/4 = 2e+6) / (36 * 50 * 1 = 1800) = 1111.to confirm this:Tcy(1/2e+6 = 0.0000005) * 1111 = 555.5 uS.555.5uS * sinetable entries(36) = ~0.02msso every 555.5 us the timer interrupt routine has to increment the sinetable pointer.and this gives us the timer reload frequency =1/555.5us = 1800.timer0 reload frequency divided by the sinetable entries 1800/36 = 50But if you want volt/hertz you have to scale the dutycycle value used by the sinetable acording to maximum dc bus voltage,this is not really the correct way to do this but just an easy example.ex full sine value cycle in with just 4 points in char size (0-255) 127(0deg) > 255(180deg) > 127(0deg) > 0(-180deg) > 127(0deg)desired frequency/ max frequency (25/50 = 0.5)volt/Herts = timer0 reload based upon frequency input & frequency input/max Frequency * dutycycle value from sinetable.so if 25hz were used the sinetable would progress 63 > 127 > 63 > 0 > 63But there is more to it, like how much of the dc bus voltage you actually utilize depending on which switching method you use,I saw a figure of 0.88 * dcbus, so you might have to take that into account when you scale and and also put limits on max and min dutycycle to.and preferbly do all this in fixed math unless you do it with a dsp.

author: qno
author_rank: Frequent Contributor
timestamp: September 15, 2015, 08:41:10 pm
content: Thanks.My idea was to measure the current an limit the current to nominal motor current at loweter frequencies by just stopping the output drive.Problem is you get unsymetrical drive and you may end up with a residual field in the motor with a risk of saturation after a while.I have to find a clever solution for that.