element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Experts, Learning and Guidance
  • Technologies
  • More
Experts, Learning and Guidance
Ask an Expert Forum Help -> generate 0 - 50mV dc with arduino
  • Blog
  • Forum
  • Documents
  • Leaderboard
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Experts, Learning and Guidance to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 11 replies
  • Subscribers 302 subscribers
  • Views 2277 views
  • Users 0 members are here
  • arduino mega 2560
  • spi
  • 50mv output
  • dc
Related
See a helpful answer?

Be sure to click 'more' and select 'suggest as answer'!

If you're the thread creator, be sure to click 'more' then 'Verify as Answer'!

Help -> generate 0 - 50mV dc with arduino

phoenixcomm
phoenixcomm over 4 years ago

Is there a way I can generate 0 to 50mV for a meter (dc most likely) from an Arduino Mega?? Any thoughts would be appreciated.

I need two of the sources. so the cheaper the better.

~~Cris

  • Sign in to reply
  • Cancel

Top Replies

  • michaelkellett
    michaelkellett over 4 years ago in reply to dougw +6
    The capacitor value may not be ideal. The time constant of the RC filter is 10us as drawn. With a PWM frequency of 64kHz (about as fast as an Arduino can go) this will make a lot of ripple. The ripple…
  • dougw
    dougw over 4 years ago +5
    The analogWrite instruction uses PWM and a resistor and capacitor on the pin to generate an analog voltage: https://www.instructables.com/Arduino-RC-Circuit-PWM-to-analog-DC/ The Mega can have 14 PWM pins…
  • Andrew J
    Andrew J over 4 years ago +5
    You're probably aware of this Chris, but it may be worth stating anyway. An IO pin is absolute maximum 40mA but recommended at 20mA. Additionally, there is an overall maximum current draw across all pins…
  • dougw
    dougw over 4 years ago

    The analogWrite instruction uses PWM and a resistor and capacitor on the pin to generate an analog voltage:

    https://www.instructables.com/Arduino-RC-Circuit-PWM-to-analog-DC/

    The Mega can have 14 PWM pins, each with a different PWM output.

    If you want better resolution, you could divide the max 5 V output with a resistor divider. Say a 10K and a 100 ohm, gets pretty close to 50 mV.

    image

    • Cancel
    • Vote Up +5 Vote Down
    • Sign in to reply
    • Cancel
  • michaelkellett
    michaelkellett over 4 years ago in reply to dougw

    The capacitor value may not be ideal.

     

    The time constant of the RC filter is 10us as drawn.

    With a PWM frequency of 64kHz (about as fast as an Arduino can go) this will make a lot of ripple.

    image

     

    The ripple is at 64kHz and may not matter. But if it does then increas the value of R1 and R2 by a factor of 10 or more (the limit is the source impedance you can cope with).

    Or increase C1.

    The lmit of the max RC that is tolerable will depoend on the response time you need. With these values it's less than 100us which is probably much too fast.

    With C1 = 10uF the response time will be less than 10ms and the ripple down to 0.3mV pk-pk (about 1.2%).

     

    MK

    • Cancel
    • Vote Up +6 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew J
    Andrew J over 4 years ago

    You're probably aware of this Chris, but it may be worth stating anyway.  An IO pin is absolute maximum 40mA but recommended at 20mA.  Additionally, there is an overall maximum current draw across all pins, see note 4 on page 356 of the datasheet.

    • Cancel
    • Vote Up +5 Vote Down
    • Sign in to reply
    • Cancel
  • dougw
    dougw over 4 years ago in reply to michaelkellett

    Good point Michael. I didn't calculate the ripple. While an analog meter is a type of filter, getting the ripple down is as easy as picking a better cap.

    • Cancel
    • Vote Up +3 Vote Down
    • Sign in to reply
    • Cancel
  • michaelkellett
    michaelkellett over 4 years ago in reply to dougw

    I had missed that the load is a meter - and from what we know of phoenixcomm  work it will likely be a moving coil device.

     

    In which case the ripple probably won't matter very much.

     

    MK

    • Cancel
    • Vote Up +4 Vote Down
    • Sign in to reply
    • Cancel
  • geralds
    geralds over 4 years ago

    Hi phoenixcomm ,

     

    Please can you a bit explain your needing, your application? e.g. with a photo, or drawing?

    0...50mV output voltage can earn a big problem.

     

    Normally under 0,9 V the output signal is logical LOW. Under that the voltages are not defined because at this area you have noise, GND bouncing, threshold and so on.

     

    Please read in the data sheet, page 385, in the chapter 32.7 "Pin driver strength".

    You will find the diagram fig. 32-22 I/O Pin output voltage vs. sink current (VCC = 3V). which says that if you sink the pin with 3mA the output voltage will rise up to 0.1V.

    And so on,,,, with a 20mA load gets rising up to 0.7 V (25°C; 0.85V 85°C).

    Similar you have this as well with the 5V source.

     

    So direct source like with a PWM or so, does not functioning, I think.

    -> With a PWM the output voltage can very big vary if you have not a right limitation. Once toggling the frequency or pulse width the output voltage grows up.

    What I can think about (I don't know your appl. "for a meter, you said"), if you make a virtual GND with an OPAMP (driven by the I/O pin), and with a DAC trim it with the offset to your 50mV.

    Must the 50mV be switch-on able?

     

    Best Regards

    Gerald

    ---

    • Cancel
    • Vote Up +3 Vote Down
    • Sign in to reply
    • Cancel
  • phoenixcomm
    phoenixcomm over 4 years ago in reply to geralds

    geralds Hi, basically i need to emulate a high current shunt, my load meter has 50mV fullscale defection.

    there are pics and info about the load meter here.

    grr. could not load my tiff image. so basically you have a generator with - to ground and + to the shunt, on one side of the shunt run a wire to the meter, and another to the LOAD. the other side of the shunt one of the wires goes to the loads ground the other wire goes to the - terminal on the meter.

    I just had a senior moment I converted the image from tiff to jpg. :)

    image

    I want to do this with the PCM output from the Arduino Max. The meter has 16 tics, so I really should hit all of them + the ones in-between as well

    I need to spend as little money as possible, or, as cheaply as I can get away with.

    thanks again.

    ~Cris.

    BTW since the meter is messuring Load which is just a percent of Total load so arbitry numbers are fine.

    • Cancel
    • Vote Up +3 Vote Down
    • Sign in to reply
    • Cancel
  • shabaz
    shabaz over 4 years ago

    Hi Cris,

     

    I just remembered I had to drive a meter with Arduino too a while back, although I used an Arduino Micro, maybe the ideas are similar with Arduino Mega).

    The info is here:

    Sensirion Gas/Temp/Humidity Sensor Kit - Review

    image

     

    The code is here:

    https://github.com/shabaz123/FeelWellMeter/blob/master/env-sensor.ino

    I don't remember it in any detail, but line 23 in the code there defines the constant 'meter' to be pin PB5, where the meter is wired as can be seen in the diagram above.

    image

     

    Lines 339-344 set up the PWM mode, and this may change on Arduino Mega.

    image

    Then, whenever the meter reading needs to change, then 'meter' is just set to a different value.

    For example, to make the needle swing to maximum, then wait three seconds, then swing to minimum, the following code is used (max and mmin can be calculated or just try any values for experimentally determining them, in my case they were 100 and 3500 respectively, for the 100uA meter):

    image

    • Cancel
    • Vote Up +3 Vote Down
    • Sign in to reply
    • Cancel
  • phoenixcomm
    phoenixcomm over 4 years ago in reply to shabaz

    shabaz looks very straight forward I shall give it a try. From what I am seeing for my 50mv meter all I will have to do double R1 to about 95 ohms.

    Thank you immensely.

    ~~ Cris

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
  • phoenixcomm
    phoenixcomm over 4 years ago in reply to phoenixcomm

    shabaz I also looked at your stuff on git hub.  nice work. You don't mind if I borrow some of it. And of course, I will give affirmations. in each function.

    ~~Cris

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube